# Title: NUMERO PRIMOS                     		      Filename: Primos.s
# Autho: Perez Bernal Arturo					                   Date: 14 / Mar / 2017
# Description: Numeros Primos
# Input: -
# Output:

@ Primos.s
@ Encontrar e imprimir primeros 500 numeros primos


@@@@@@@@@@@@@
@ registers @
@@@@@@@@@@@@@

@ r1 punto a la direccion del "primo"
@ r3 numero que checaremos        (N en Knuth)
@ r4 contara los numeros primos   (J en Knuth)
@ r5 divisores que revisaremos
@ r6 indicie para los divisores principales
@ r7 contendra el recordatorio    (R en Knuth)
@ r8 contendra el cociente        (Q en Knuth)
@ r9 numero de primos que buscaremos

.section    .bss
.comm prime, 2000         @ Reservamos espacio para lo primos

.section      .data
spc:                  @ Espacio del primo con 3 espacios
        .ascii "  "
len = . - spc
nl:                   @ Solo es una nueva linea
        .ascii "\n"
limit:                @ Indice del ultimo primo que necesitamos
        .long 500
       
.section .text
.globl  _start
_start:

P1:                   @
ldr r1, =prime        @
mov r0, $2            @ El primer primo es 2
str r0, [r1]          @ Almacenamos este numero en primo
ldr r0, =limit
ldr r9, [r0]          @ r2 mantendra los numeros de los primos que buscaremos
mov r3, $3            @ Inicializamos N a 3
mov r4, $1            @ Inicializamos J a 1

P2:                   @ Venimos aqui cuando hemos encontrado un primo
add r4, r4, $1        @ Incrementa J
str r3, [r1, #4]      @ Almacenamos N en "primo" (con respuesta)

P3: 
cmp r4, r9            @ Verificamos si hemos terminado
bge P9                @ if so branch to p9